library(tidyverse)
library(datasets)

Técnicas

Desde el punto de vista del tipo de aprendizaje:

Aprendizaje Supervisado:

Desde estadística:
datasets::attitude
ggplot(attitude, aes(rating, complaints))+
  geom_point()+
  geom_smooth(method = 'lm')

set.seed(123)
df <- tibble(x = c(rchisq(20, 2),rchisq(20, 10)), y = rep(c(0,1), each=20))

ggplot(df, aes(x, y))+
  geom_point()+
  geom_smooth(method = "glm", 
    method.args = list(family = "binomial"), 
    se = FALSE)

  • Y muchos más…

Aprendizaje No supervisado:

Reducción de dimensionalidad:

Aprendizaje Semi-supervisado

set.seed(123)
df <- tibble(x = c(rchisq(20, 2),rchisq(20, 10)), y = rep(c(0,1), each=20))

ggplot(df, aes(x, y))+
  geom_point()+
  geom_smooth(method = "glm", 
    method.args = list(family = "binomial"), 
    se = FALSE)

  • Y muchos más…

Aprendizaje No supervisado:

Reducción de dimensionalidad:
  • PCA
  • LSI
  • T-SNE >>>>>>> 9d1d6c9565caa34a3995cdcd4ae102982479ff65

Desde el punto de vista del tipo de datos:

Datos estructurados:

Datos tabulados
iris
Series de Tiempo:

Grafos:

Datos geográficos

Datos no estructurados:

imagenes
sonido

Desde el punto de vista del remuestreo:

  • Test-train
  • Cross-Validation

Desde el punto de vista de la optimización:

Flujo de trabajo

  1. Preprocesamiento
  2. Entrenamiento
  3. Validación

Meta flujo de trabajo

Ejemplo: https://github.com/DiegoKoz/intro_ds

Otros temas

  • Trade-off Precision-recall

Implementaciones:

LS0tCnRpdGxlOiBNYXBhIGRlIERhdGEgU2NpZW5jZQpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwpkYXRlOiAiIgotLS0KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGRhdGFzZXRzKQoKYGBgCgohW10oaW1nL3Zlbm5fZHMucG5nKXt3aWR0aD03NTB9CgojIyBUw6ljbmljYXMKCgojIyMgRGVzZGUgZWwgcHVudG8gZGUgdmlzdGEgZGVsIHRpcG8gZGUgYXByZW5kaXphamU6CgojIyMjIEFwcmVuZGl6YWplIFN1cGVydmlzYWRvOgojIyMjIyBEZXNkZSBlc3RhZMOtc3RpY2E6CgotIFtNb2RlbG8gTGluZWFsXShodHRwOi8vZmFjdWx0eS5tYXJzaGFsbC51c2MuZWR1L2dhcmV0aC1qYW1lcy9JU0wvSVNMUiUyMFNldmVudGglMjBQcmludGluZy5wZGYpCiAgICAKCmBgYHtyfQpkYXRhc2V0czo6YXR0aXR1ZGUKZ2dwbG90KGF0dGl0dWRlLCBhZXMocmF0aW5nLCBjb21wbGFpbnRzKSkrCiAgZ2VvbV9wb2ludCgpKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICdsbScpCmBgYAogICAgCi0gW1JpZGdlLCBMYXNzbywgRWxhc3RpYyBOZXQsIFNwbGluZXMsIGV0Yy5dKGh0dHA6Ly9mYWN1bHR5Lm1hcnNoYWxsLnVzYy5lZHUvZ2FyZXRoLWphbWVzL0lTTC9JU0xSJTIwU2V2ZW50aCUyMFByaW50aW5nLnBkZikKCiFbXShpbWcvcmlkZ2VfbGFzc28ucG5nKXt3aWR0aD01MDB9CiAgCi0gW1JlZ3Jlc2nDs24gbG9nw61zaXRjYV0oaHR0cDovL2ZhY3VsdHkubWFyc2hhbGwudXNjLmVkdS9nYXJldGgtamFtZXMvSVNML0lTTFIlMjBTZXZlbnRoJTIwUHJpbnRpbmcucGRmKQogIApgYGB7cn0Kc2V0LnNlZWQoMTIzKQpkZiA8LSB0aWJibGUoeCA9IGMocmNoaXNxKDIwLCAyKSxyY2hpc3EoMjAsIDEwKSksIHkgPSByZXAoYygwLDEpLCBlYWNoPTIwKSkKCmdncGxvdChkZiwgYWVzKHgsIHkpKSsKICBnZW9tX3BvaW50KCkrCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImdsbSIsIAogICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9ICJiaW5vbWlhbCIpLCAKICAgIHNlID0gRkFMU0UpCmBgYAoKLSBbU3VwcG9ydCBWZWN0b3IgTWFjaGluZV0oaHR0cDovL2ZhY3VsdHkubWFyc2hhbGwudXNjLmVkdS9nYXJldGgtamFtZXMvSVNML0lTTFIlMjBTZXZlbnRoJTIwUHJpbnRpbmcucGRmKQohW10oaW1nL1NWTV9tYXJnaW4ucG5nKXt3aWR0aD01MDB9CgotIFtOYWl2ZSBCYXllc10oaHR0cDovL3Byb2ZzaXRlLnVtLmFjLmlyL35tb25zZWZpL21hY2hpbmUtbGVhcm5pbmcvcGRmL01hY2hpbmUtTGVhcm5pbmctVG9tLU1pdGNoZWxsLnBkZikKICAKIVtdKGltZy9OQl8xLnBuZyl7d2lkdGg9NTAwfQohW10oaW1nL05CXzIucG5nKXt3aWR0aD03NTB9CiAgCi0gW01hcmtvdiBjaGFpbnNdKGh0dHBzOi8vd2ViLnN0YW5mb3JkLmVkdS9+aGFzdGllL1BhcGVycy9FU0xJSS5wZGYpe3dpZHRoPTUwMH0KLSAuLi4KIyMjIyMgRGVzZGUgY29tcHV0YWNpw7NuOgoKLSBbU2lzdGVtYSBleHBlcnRvXShodHRwOi8vcHJvZnNpdGUudW0uYWMuaXIvfm1vbnNlZmkvbWFjaGluZS1sZWFybmluZy9wZGYvTWFjaGluZS1MZWFybmluZy1Ub20tTWl0Y2hlbGwucGRmKQotIFtLIG5lYXJlc3QgbmVpZ2hib3JzXShodHRwOi8vcHJvZnNpdGUudW0uYWMuaXIvfm1vbnNlZmkvbWFjaGluZS1sZWFybmluZy9wZGYvTWFjaGluZS1MZWFybmluZy1Ub20tTWl0Y2hlbGwucGRmKQohW10oaW1nL2tubi5wbmcpCi0gW8OBcmJvbGVzIGRlIGRlY2lzacOzbl0oaHR0cDovL3Byb2ZzaXRlLnVtLmFjLmlyL35tb25zZWZpL21hY2hpbmUtbGVhcm5pbmcvcGRmL01hY2hpbmUtTGVhcm5pbmctVG9tLU1pdGNoZWxsLnBkZikKCiFbXShpbWcvd2hhdC1pcy1hLWRlY2lzaW9uLXRyZWUucG5nKXt3aWR0aD03NTB9ICAgIAoKLSBbRW5zYW1ibGVzIGRlIMOhcmJvbGVzXShodHRwczovL2RvYy5sYWdvdXQub3JnL090aGVycy9EYXRhJTIwTWluaW5nL0Vuc2VtYmxlJTIwTWV0aG9kcyUyMGluJTIwRGF0YSUyME1pbmluZ18lMjBJbXByb3ZpbmclMjBBY2N1cmFjeSUyMHRocm91Z2glMjBDb21iaW5pbmclMjBQcmVkaWN0aW9ucyUyMCU1QlNlbmklMjAlMjYlMjBFbGRlciUyMDIwMTAtMDItMjQlNUQucGRmKQotIFtSYW5kb20gRm9yZXN0IChCYWdnaW5nKV0oaHR0cHM6Ly9ib29rZG93bi5vcmcvY29udGVudC8yMDMxL2Vuc2FtYmxhZG9yZXMtcmFuZG9tLWZvcmVzdC1wYXJ0ZS1pLmh0bWwjcmFuZG9tLWZvcmVzdCkKIVtdKGltZy9SRi5wbmcpe3dpZHRoPTc1MH0gICAgCi0gW1hHLUJPT1NUIChCb29zdGluZyldKGh0dHBzOi8vbWFjaGluZWxlYXJuaW5nbWFzdGVyeS5jb20vZ2VudGxlLWludHJvZHVjdGlvbi14Z2Jvb3N0LWFwcGxpZWQtbWFjaGluZS1sZWFybmluZy8pCiAgICAKIVtdKGltZy9ib29zdGVkLXRyZWVzLXByb2Nlc3MucG5nKXt3aWR0aD03NTB9ICAgIAoKLSBZIG11Y2hvcyBtw6FzLi4uCgojIyMjIyBEZWVwIExlYXJuaW5nOgoKLSBbTXVsdGktbGF5ZXIgcGVyY2VwdHJvbiBuZXR3b3JrXShodHRwczovL3d3dy5kZWVwbGVhcm5pbmdib29rLm9yZy9jb250ZW50cy9tbHAuaHRtbCkKIVtNTFBdKGltZy9ubi5wbmcpe3dpZHRoPTUwMH0KLSBbQ29udm9sdXRpb25hbCBOZXVyYWwgTmV0d29ya10oaHR0cDovL2NzMjMxbi5naXRodWIuaW8vY29udm9sdXRpb25hbC1uZXR3b3Jrcy8pCiFbQ05OXShpbWcvY25uLnBuZyl7d2lkdGg9MTAwMH0KLSBbTG9uZy1zaG9ydCBUZXJtIE1lbW9yeSBOZXVyYWwgTmV0d29ya10oaHR0cHM6Ly93d3cuZGVlcGxlYXJuaW5nYm9vay5vcmcvY29udGVudHMvcm5uLmh0bWwpCi0gLi4uCiAgICAKCiMjIyMgQXByZW5kaXphamUgTm8gc3VwZXJ2aXNhZG86CgojIyMjIyBDbHVzdGVyaW5nOgoKLSBbSy1tZWFuc10oaHR0cDovL2ZhY3VsdHkubWFyc2hhbGwudXNjLmVkdS9nYXJldGgtamFtZXMvSVNML0lTTFIlMjBTZXZlbnRoJTIwUHJpbnRpbmcucGRmKQotIFtQYXRpdGlvbiBhcm91bmQgbWVkaW9pZHNdKGh0dHBzOi8vd3d3LmNzLnVtYi5lZHUvY3M3MzgvcGFtMS5wZGYpCi0gW0RCU0NBTl0oaHR0cHM6Ly9lbHZleC51Z3IuZXMvaWRiaXMvZG0vc2xpZGVzLzQzJTIwQ2x1c3RlcmluZyUyMC0lMjBEZW5zaXR5LnBkZikKCiFbXShpbWcvY2x1c3Rlcl9jb21wYXJpc29uLnBuZyl7d2lkdGg9NTAwfQogICAgCiMjIyMjIFJlZHVjY2nDs24gZGUgZGltZW5zaW9uYWxpZGFkOgotIFtQQ0FdKGh0dHA6Ly93d3cudWIuZWR1L3N0YXQvcGVyc29uYWwvY3VhZHJhcy9tZXRvZG9zLnBkZikKIVtdKGltZy9QQ0FleGFtcGxlLnBuZyl7d2lkdGg9NTAwfQotIFtMU0ldKGh0dHA6Ly9sc2EuY29sb3JhZG8uZWR1L3BhcGVycy9kcDEuTFNBaW50cm8ucGRmKQotIFtULVNORV0oaHR0cHM6Ly9sdmRtYWF0ZW4uZ2l0aHViLmlvL3RzbmUvKQohW10oaW1nL3RzbmUucG5nKXt3aWR0aD01MDB9CgoKIyMjIyBbQXByZW5kaXphamUgU2VtaS1zdXBlcnZpc2Fkb10oaHR0cHM6Ly93d3cuZ2Vla3Nmb3JnZWVrcy5vcmcvbWwtc2VtaS1zdXBlcnZpc2VkLWxlYXJuaW5nLykKCiFbXShpbWcvc2VtaXN1cGVydmlzZWQucG5nKXt3aWR0aD01MDB9CgogICAgCiFbXShpbWcvcmlkZ2VfbGFzc28ucG5nKXt3aWR0aD01MDB9CiAgCi0gW1JlZ3Jlc2nDs24gbG9nw61zaXRjYV0oaHR0cDovL2ZhY3VsdHkubWFyc2hhbGwudXNjLmVkdS9nYXJldGgtamFtZXMvSVNML0lTTFIlMjBTZXZlbnRoJTIwUHJpbnRpbmcucGRmKQogIApgYGB7cn0Kc2V0LnNlZWQoMTIzKQpkZiA8LSB0aWJibGUoeCA9IGMocmNoaXNxKDIwLCAyKSxyY2hpc3EoMjAsIDEwKSksIHkgPSByZXAoYygwLDEpLCBlYWNoPTIwKSkKCmdncGxvdChkZiwgYWVzKHgsIHkpKSsKICBnZW9tX3BvaW50KCkrCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImdsbSIsIAogICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9ICJiaW5vbWlhbCIpLCAKICAgIHNlID0gRkFMU0UpCmBgYAoKLSBbU3VwcG9ydCBWZWN0b3IgTWFjaGluZV0oaHR0cDovL2ZhY3VsdHkubWFyc2hhbGwudXNjLmVkdS9nYXJldGgtamFtZXMvSVNML0lTTFIlMjBTZXZlbnRoJTIwUHJpbnRpbmcucGRmKQohW10oaW1nL1NWTV9tYXJnaW4ucG5nKXt3aWR0aD01MDB9CgotIFtOYWl2ZSBCYXllc10oaHR0cDovL3Byb2ZzaXRlLnVtLmFjLmlyL35tb25zZWZpL21hY2hpbmUtbGVhcm5pbmcvcGRmL01hY2hpbmUtTGVhcm5pbmctVG9tLU1pdGNoZWxsLnBkZikKICAKIVtdKGltZy9OQl8xLnBuZyl7d2lkdGg9NTAwfQohW10oaW1nL05CXzIucG5nKXt3aWR0aD03NTB9CiAgCi0gW01hcmtvdiBjaGFpbnNdKGh0dHBzOi8vd2ViLnN0YW5mb3JkLmVkdS9+aGFzdGllL1BhcGVycy9FU0xJSS5wZGYpe3dpZHRoPTUwMH0KLSAuLi4KIyMjIyMgRGVzZGUgY29tcHV0YWNpw7NuOgoKLSBbU2lzdGVtYSBleHBlcnRvXShodHRwOi8vcHJvZnNpdGUudW0uYWMuaXIvfm1vbnNlZmkvbWFjaGluZS1sZWFybmluZy9wZGYvTWFjaGluZS1MZWFybmluZy1Ub20tTWl0Y2hlbGwucGRmKQotIFtLIG5lYXJlc3QgbmVpZ2hib3JzXShodHRwOi8vcHJvZnNpdGUudW0uYWMuaXIvfm1vbnNlZmkvbWFjaGluZS1sZWFybmluZy9wZGYvTWFjaGluZS1MZWFybmluZy1Ub20tTWl0Y2hlbGwucGRmKQohW10oaW1nL2tubi5wbmcpCi0gW8OBcmJvbGVzIGRlIGRlY2lzacOzbl0oaHR0cDovL3Byb2ZzaXRlLnVtLmFjLmlyL35tb25zZWZpL21hY2hpbmUtbGVhcm5pbmcvcGRmL01hY2hpbmUtTGVhcm5pbmctVG9tLU1pdGNoZWxsLnBkZikKCiFbXShpbWcvd2hhdC1pcy1hLWRlY2lzaW9uLXRyZWUucG5nKXt3aWR0aD03NTB9ICAgIAoKLSBbRW5zYW1ibGVzIGRlIMOhcmJvbGVzXShodHRwczovL2RvYy5sYWdvdXQub3JnL090aGVycy9EYXRhJTIwTWluaW5nL0Vuc2VtYmxlJTIwTWV0aG9kcyUyMGluJTIwRGF0YSUyME1pbmluZ18lMjBJbXByb3ZpbmclMjBBY2N1cmFjeSUyMHRocm91Z2glMjBDb21iaW5pbmclMjBQcmVkaWN0aW9ucyUyMCU1QlNlbmklMjAlMjYlMjBFbGRlciUyMDIwMTAtMDItMjQlNUQucGRmKQotIFtSYW5kb20gRm9yZXN0IChCYWdnaW5nKV0oaHR0cHM6Ly9ib29rZG93bi5vcmcvY29udGVudC8yMDMxL2Vuc2FtYmxhZG9yZXMtcmFuZG9tLWZvcmVzdC1wYXJ0ZS1pLmh0bWwjcmFuZG9tLWZvcmVzdCkKIVtdKGltZy9SRi5wbmcpe3dpZHRoPTc1MH0gICAgCi0gW1hHLUJPT1NUIChCb29zdGluZyldKGh0dHBzOi8vbWFjaGluZWxlYXJuaW5nbWFzdGVyeS5jb20vZ2VudGxlLWludHJvZHVjdGlvbi14Z2Jvb3N0LWFwcGxpZWQtbWFjaGluZS1sZWFybmluZy8pCiAgICAKIVtdKGltZy9ib29zdGVkLXRyZWVzLXByb2Nlc3MucG5nKXt3aWR0aD03NTB9ICAgIAoKLSBZIG11Y2hvcyBtw6FzLi4uCgojIyMjIyBEZWVwIExlYXJuaW5nOgoKLSBbTXVsdGktbGF5ZXIgcGVyY2VwdHJvbiBuZXR3b3JrXShodHRwczovL3d3dy5kZWVwbGVhcm5pbmdib29rLm9yZy9jb250ZW50cy9tbHAuaHRtbCkKIVtNTFBdKGltZy9ubi5wbmcpe3dpZHRoPTUwMH0KLSBbQ29udm9sdXRpb25hbCBOZXVyYWwgTmV0d29ya10oaHR0cDovL2NzMjMxbi5naXRodWIuaW8vY29udm9sdXRpb25hbC1uZXR3b3Jrcy8pCiFbQ05OXShpbWcvY25uLnBuZyl7d2lkdGg9MTAwMH0KLSBbTG9uZy1zaG9ydCBUZXJtIE1lbW9yeSBOZXVyYWwgTmV0d29ya10oaHR0cHM6Ly93d3cuZGVlcGxlYXJuaW5nYm9vay5vcmcvY29udGVudHMvcm5uLmh0bWwpCi0gLi4uCiAgICAKCiMjIyMgQXByZW5kaXphamUgTm8gc3VwZXJ2aXNhZG86CgojIyMjIyBDbHVzdGVyaW5nOgoKLSBbSy1tZWFuc10oaHR0cDovL2ZhY3VsdHkubWFyc2hhbGwudXNjLmVkdS9nYXJldGgtamFtZXMvSVNML0lTTFIlMjBTZXZlbnRoJTIwUHJpbnRpbmcucGRmKQotIFtQYXRpdGlvbiBhcm91bmQgbWVkaW9pZHNdKGh0dHBzOi8vd3d3LmNzLnVtYi5lZHUvY3M3MzgvcGFtMS5wZGYpCi0gW0RCU0NBTl0oaHR0cHM6Ly9lbHZleC51Z3IuZXMvaWRiaXMvZG0vc2xpZGVzLzQzJTIwQ2x1c3RlcmluZyUyMC0lMjBEZW5zaXR5LnBkZikKCiFbXShpbWcvY2x1c3Rlcl9jb21wYXJpc29uLnBuZyl7d2lkdGg9NTAwfQogICAgCiMjIyMjIFJlZHVjY2nDs24gZGUgZGltZW5zaW9uYWxpZGFkOgotIFtQQ0FdKGh0dHA6Ly93d3cudWIuZWR1L3N0YXQvcGVyc29uYWwvY3VhZHJhcy9tZXRvZG9zLnBkZikKIVtdKGltZy9QQ0FleGFtcGxlLnBuZyl7d2lkdGg9NTAwfQotIFtMU0ldKGh0dHA6Ly9sc2EuY29sb3JhZG8uZWR1L3BhcGVycy9kcDEuTFNBaW50cm8ucGRmKQotIFtULVNORV0oaHR0cHM6Ly9sdmRtYWF0ZW4uZ2l0aHViLmlvL3RzbmUvKQohW10oaW1nL3RzbmUucG5nKXt3aWR0aD01MDB9Cj4+Pj4+Pj4gOWQxZDZjOTU2NWNhYTM0YTM5OTVjZGNkNGFlMTAyOTgyNDc5ZmY2NQoKIyMjIyBbTW9kZWxvcyBnZW5lcmF0aXZvc10oaHR0cHM6Ly93d3cub3JlaWxseS5jb20vbGlicmFyeS92aWV3L2dlbmVyYXRpdmUtZGVlcC1sZWFybmluZy85NzgxNDkyMDQxOTMxL2NoMDEuaHRtbCkKClBvciBlamVtcGxvOiBbaHR0cHM6Ly90cmFuc2Zvcm1lci5odWdnaW5nZmFjZS5jby9kb2MvZ3B0Mi1sYXJnZV0oaHR0cHM6Ly90cmFuc2Zvcm1lci5odWdnaW5nZmFjZS5jby9kb2MvZ3B0Mi1sYXJnZSkKCiMjIyMgW0FwcmVuZGl6YWplIFNlbWktc3VwZXJ2aXNhZG9dKGh0dHBzOi8vd3d3LmdlZWtzZm9yZ2Vla3Mub3JnL21sLXNlbWktc3VwZXJ2aXNlZC1sZWFybmluZy8pCgohW10oaW1nL3NlbWlzdXBlcnZpc2VkLnBuZyl7d2lkdGg9NTAwfQoKIyMjIyBbTW9kZWxvcyBnZW5lcmF0aXZvc10oaHR0cHM6Ly93d3cub3JlaWxseS5jb20vbGlicmFyeS92aWV3L2dlbmVyYXRpdmUtZGVlcC1sZWFybmluZy85NzgxNDkyMDQxOTMxL2NoMDEuaHRtbCkKClBvciBlamVtcGxvOiBbaHR0cHM6Ly90cmFuc2Zvcm1lci5odWdnaW5nZmFjZS5jby9kb2MvZ3B0Mi1sYXJnZV0oaHR0cHM6Ly90cmFuc2Zvcm1lci5odWdnaW5nZmFjZS5jby9kb2MvZ3B0Mi1sYXJnZSkKCiMjIyBEZXNkZSBlbCBwdW50byBkZSB2aXN0YSBkZWwgdGlwbyBkZSBkYXRvczoKCiMjIyMgRGF0b3MgZXN0cnVjdHVyYWRvczoKIyMjIyMgRGF0b3MgdGFidWxhZG9zCmBgYHtyfQppcmlzCmBgYAoKIyMjIyMgU2VyaWVzIGRlIFRpZW1wbzoKCiFbXShpbWcvdGltZXNlcmllcy5wbmcpe3dpZHRoPTc1MH0KCi0gW0FSSU1BXShodHRwczovL290ZXh0cy5jb20vZnBwMi9hcmltYS5odG1sKQotIFtXYXZlbGV0c10oaHR0cDovL3NlZGljaS51bmxwLmVkdS5hci9iaXRzdHJlYW0vaGFuZGxlLzEwOTE1LzI0Mjg5L0RvY3VtZW50b19jb21wbGV0by5wZGY/c2VxdWVuY2U9MSkKCiFbXShpbWcvd2F2ZWxldHMucG5nKXt3aWR0aD01MDB9CgojIyMjIyBHcmFmb3M6CgohW10oaW1nL25ldHdvcmsucG5nKXt3aWR0aD01MDB9CgojIyMjIyBEYXRvcyBnZW9ncsOhZmljb3MKCiFbXShpbWcvZ2VvZGF0YS5naWYpe3dpZHRoPTUwMH0KCiMjIyMgRGF0b3Mgbm8gZXN0cnVjdHVyYWRvczoKIyMjIyMgdGV4dG86CgotIFtMREFdKGh0dHA6Ly93d3cuam1sci5vcmcvcGFwZXJzL3ZvbHVtZTMvYmxlaTAzYS9ibGVpMDNhLnBkZikKCiFbXShpbWcvTERBLnBuZyl7d2lkdGg9NTAwfQoKLSBbV29yZCBFbWJlZGRpbmdzXShodHRwczovL21lZGl1bS5jb20vQGdydWl6ZGV2aWxsYS9pbnRyb2R1Y2NpJUMzJUIzbi1hLXdvcmQydmVjLXNraXAtZ3JhbS1tb2RlbC00ODAwZjcyYzg3MWYpCgohW10oaW1nL3dvcmRfZW1iZWRkaW5ncy5wbmcpe3dpZHRoPTUwMH0KCiMjIyMjIGltYWdlbmVzCiMjIyMjIHNvbmlkbwoKCiMjIyBEZXNkZSBlbCBwdW50byBkZSB2aXN0YSBkZWwgcmVtdWVzdHJlbzoKCi0gVGVzdC10cmFpbgotIENyb3NzLVZhbGlkYXRpb24KCiFbXShpbWcvdGVzdHRyYWluc3BsaXQucG5nKXt3aWR0aD01MDB9CgoKLSBbQm9vdHN0cmFwaW5nXShodHRwczovL21hY2hpbmVsZWFybmluZ21hc3RlcnkuY29tL2EtZ2VudGxlLWludHJvZHVjdGlvbi10by10aGUtYm9vdHN0cmFwLW1ldGhvZC8pCgohW10oaW1nL2Jvb3RzdHJhcC1yZXNhbXBsaW5nLnBuZyl7d2lkdGg9NTAwfQoKCiMjIyBEZXNkZSBlbCBwdW50byBkZSB2aXN0YSBkZSBsYSBvcHRpbWl6YWNpw7NuOgotIFtHcmFkaWVudCBEZXNjZW50XShodHRwczovL2hhY2tlcm5vb24uY29tL2dyYWRpZW50LWRlc2NlbnQtYXluay03Y2JlOTVhNzc4ZGEpCgohW10oaW1nL2dyYWRpZW50ZGVzY2VudC5wbmcpe3dpZHRoPTUwMH0KCgotIFtBbGdvcsOtdG1vcyBHZW7DqXRpY29zXShodHRwczovL3Rvd2FyZHNkYXRhc2NpZW5jZS5jb20vaW50cm9kdWN0aW9uLXRvLWdlbmV0aWMtYWxnb3JpdGhtcy1pbmNsdWRpbmctZXhhbXBsZS1jb2RlLWUzOTZlOThkOGJmMykKCiFbXShpbWcvZ2FkaWFncmFtLnBuZyl7d2lkdGg9NTAwfQoKLSBbSW5mZXJlbmNpYSBWYXJpYWNpb25hbF0oaHR0cHM6Ly9hcnhpdi5vcmcvcGRmLzE2MDEuMDA2NzAucGRmKQoKCiMjIEZsdWpvIGRlIHRyYWJham8KClshW10oaW1nL2RhdGEtc2NpZW5jZS13b3JrZmxvdy5wbmcpe3dpZHRoPTEwMDB9XShodHRwczovL3I0ZHMuaGFkLmNvLm56L2ludHJvZHVjdGlvbi5odG1sKQoKMS4gUHJlcHJvY2VzYW1pZW50bwoxLiBFbnRyZW5hbWllbnRvCjEuIFZhbGlkYWNpw7NuCgojIyBNZXRhIGZsdWpvIGRlIHRyYWJham8KCiFbXShpbWcvZ2l0LmpwZWcpe3dpZHRoPTIwMH0KIVtdKGltZy9naXRfZmxvdy5wbmcpe3dpZHRoPTEwMDB9CgpFamVtcGxvOiBbaHR0cHM6Ly9naXRodWIuY29tL0RpZWdvS296L2ludHJvX2RzXShodHRwczovL2dpdGh1Yi5jb20vRGllZ29Lb3ovaW50cm9fZHMpCgojIyBPdHJvcyB0ZW1hcwoKLSBbU29icmVhanVzdGVdKGh0dHBzOi8vZGllZ29rb3ouc2hpbnlhcHBzLmlvL292ZXJmaXR0aW5nLykKCiFbXShpbWcvb3ZlcmZpdHRpbmcucG5nKXt3aWR0aD03NTB9CgoKLSBbVHJhZGUtb2ZmIHNlc2dvIHZhcmlhbnphXShodHRwOi8vZmFjdWx0eS5tYXJzaGFsbC51c2MuZWR1L2dhcmV0aC1qYW1lcy9JU0wvSVNMUiUyMFNldmVudGglMjBQcmludGluZy5wZGYpCgohW10oaW1nL2JpYXN2YXJpYW5jZS5qcGcpe3dpZHRoPTUwMH0KCi0gVHJhZGUtb2ZmIFByZWNpc2lvbi1yZWNhbGwKCiFbXShpbWcvcHJlY3JlY2FsbC5wbmcpe3dpZHRoPTUwMH0KCiMjIEltcGxlbWVudGFjaW9uZXM6CgotIFtDYXJldF0oaHR0cDovL3RvcGVwby5naXRodWIuaW8vY2FyZXQvaW5kZXguaHRtbCkKLSBbVGlkeW1vZGVsc10oaHR0cHM6Ly9ydmlld3MucnN0dWRpby5jb20vMjAxOS8wNi8xOS9hLWdlbnRsZS1pbnRyby10by10aWR5bW9kZWxzLykKLSBbU2NpLWtpdCBsZWFybl0oaHR0cHM6Ly9zY2lraXQtbGVhcm4ub3JnL3N0YWJsZS8pCgoKCgoKCgo=